๋ฌธ์์ด ์๊ณ ๋ฆฌ์ฆ๊ณผ ํจํด ๋งค์นญ ๊ธฐ๋ฒ์ ์ธ๊ณ๋ฅผ ํํํด ๋ณด์ธ์. ์ด ๊ฐ์ด๋๋ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ๋ธ๋ฃจํธ ํฌ์ค, KMP, ๋ณด์ด์ด-๋ฌด์ด, ๋ผ๋น-์นดํ ์๊ณ ๋ฆฌ์ฆ ๋ฐ ๊ฒ์ ์์ง, ์๋ฌผ์ ๋ณดํ, ์ฌ์ด๋ฒ ๋ณด์ ๋ฑ์ ์ฌ์ฉ๋๋ ๊ณ ๊ธ ๋ฐฉ๋ฒ๊น์ง ๋ค๋ฃน๋๋ค.
๋ฌธ์์ด ์๊ณ ๋ฆฌ์ฆ: ํจํด ๋งค์นญ ๊ธฐ๋ฒ ์ฌ์ธต ๋ถ์
์ปดํจํฐ ๊ณผํ์ ์์ญ์์ ๋ฌธ์์ด ์๊ณ ๋ฆฌ์ฆ์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ถ์ํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด ๋ถ์ผ์ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ์ธ ํจํด ๋งค์นญ์ ๋ ํฐ ํ ์คํธ ๋ด์์ ํน์ ํจํด์ ๋ฐ์์ ์ฐพ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด๋ ์๋ ํ๋ก์ธ์์ ๊ฐ๋จํ ํ ์คํธ ๊ฒ์๋ถํฐ ์๋ฌผ์ ๋ณดํ ๋ฐ ์ฌ์ด๋ฒ ๋ณด์์ ๋ณต์กํ ๋ถ์์ ์ด๋ฅด๊ธฐ๊น์ง ๊ด๋ฒ์ํ ์์ฉ ๋ถ์ผ๋ฅผ ๊ฐ์ง๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋๋ ๋ช ๊ฐ์ง ํต์ฌ ํจํด ๋งค์นญ ๊ธฐ๋ฒ์ ํ๊ตฌํ์ฌ ๊ทธ ๊ธฐ๋ณธ ์๋ฆฌ, ์ฅ์ ๋ฐ ๋จ์ ์ ๋ํ ๊น์ ์ดํด๋ฅผ ์ ๊ณตํ ๊ฒ์ ๋๋ค.
ํจํด ๋งค์นญ ์๊ฐ
ํจํด ๋งค์นญ์ ๋ ํฐ ๋ฌธ์ ์ํ์ค("ํ ์คํธ") ๋ด์์ ํน์ ๋ฌธ์ ์ํ์ค("ํจํด")์ ์ธ์คํด์ค๋ฅผ ํ๋ ์ด์ ์ฐพ๋ ๊ณผ์ ์ ๋๋ค. ์ด ๊ฐ๋จํด ๋ณด์ด๋ ์์ ์ ๋ค์๊ณผ ๊ฐ์ ๋ง์ ์ค์ํ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ธฐ์ด๋ฅผ ํ์ฑํฉ๋๋ค:
- ํ ์คํธ ํธ์ง๊ธฐ ๋ฐ ๊ฒ์ ์์ง: ๋ฌธ์๋ ์น ํ์ด์ง ๋ด์์ ํน์ ๋จ์ด๋ ๊ตฌ๋ฌธ์ ์ฐพ์ต๋๋ค.
- ์๋ฌผ์ ๋ณดํ: ๊ฒ๋ ๋ด์์ ํน์ DNA ์์ด์ ์๋ณํฉ๋๋ค.
- ๋คํธ์ํฌ ๋ณด์: ๋คํธ์ํฌ ํธ๋ํฝ์์ ์ ์ฑ ํจํด์ ํ์งํฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ถ: ํจ์จ์ ์ธ ์ ์ฅ์ ์ํด ๋ฐ์ดํฐ์์ ๋ฐ๋ณต๋๋ ํจํด์ ์๋ณํฉ๋๋ค.
- ์ปดํ์ผ๋ฌ ์ค๊ณ: ์ดํ ๋ถ์์ ์์ค ์ฝ๋์ ํจํด์ ๋งค์นญํ์ฌ ํ ํฐ์ ์๋ณํ๋ ์์ ์ ํฌํจํฉ๋๋ค.
ํจํด ๋งค์นญ ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ํนํ ๋์ฉ๋ ํ ์คํธ๋ฅผ ๋ค๋ฃฐ ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์๋ชป ์ค๊ณ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๊ฐํ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ด๋ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ ๊ณผ ์ฝ์ ์ ์ดํดํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค.
1. ๋ธ๋ฃจํธ ํฌ์ค(Brute Force) ์๊ณ ๋ฆฌ์ฆ
๋ธ๋ฃจํธ ํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ ํจํด ๋งค์นญ์ ๋ํ ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ๊ฐ๋ฅํ ๋ชจ๋ ์์น์์ ํจํด๊ณผ ํ ์คํธ๋ฅผ ๋ฌธ์๋ณ๋ก ๋น๊ตํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ดํดํ๊ณ ๊ตฌํํ๊ธฐ๋ ์ฝ์ง๋ง, ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ์์๋ ๋นํจ์จ์ ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์๋ ๋ฐฉ์:
- ํจํด์ ํ ์คํธ์ ์์ ๋ถ๋ถ์ ๋ง์ถฅ๋๋ค.
- ํจํด์ ๋ฌธ์์ ํ ์คํธ์ ํด๋น ๋ฌธ์๋ฅผ ๋น๊ตํฉ๋๋ค.
- ๋ชจ๋ ๋ฌธ์๊ฐ ์ผ์นํ๋ฉด ์ผ์น ํญ๋ชฉ์ ์ฐพ์ ๊ฒ์ ๋๋ค.
- ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ฉด ํจํด์ ํ ์คํธ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ด๋์ํต๋๋ค.
- ํจํด์ด ํ ์คํธ์ ๋์ ๋๋ฌํ ๋๊น์ง 2-4๋จ๊ณ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
์์:
ํ ์คํธ: ABCABCDABABCDABCDABDE ํจํด: ABCDABD
์ด ์๊ณ ๋ฆฌ์ฆ์ "ABCDABD"๋ฅผ "ABCABCDABABCDABCDABDE"์ ์ฒ์๋ถํฐ ๋น๊ตํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ผ์น ํญ๋ชฉ์ ์ฐพ๊ฑฐ๋ ํ ์คํธ ๋์ ๋๋ฌํ ๋๊น์ง ํจํด์ ํ ๋ฒ์ ํ ๋ฌธ์์ฉ ์ด๋์ํต๋๋ค.
์ฅ์ :
- ์ดํดํ๊ณ ๊ตฌํํ๊ธฐ ๊ฐ๋จํฉ๋๋ค.
- ์ต์ํ์ ๋ฉ๋ชจ๋ฆฌ๋ง ํ์ํฉ๋๋ค.
๋จ์ :
- ๋์ฉ๋ ํ ์คํธ์ ํจํด์ ๋นํจ์จ์ ์ ๋๋ค.
- ์ต์ ์ ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋๋ O(m*n)์ ๋๋ค (n์ ํ ์คํธ ๊ธธ์ด, m์ ํจํด ๊ธธ์ด).
- ๋ถ์ผ์น๊ฐ ๋ฐ์ํ ๋ ๋ถํ์ํ ๋น๊ต๋ฅผ ์ํํฉ๋๋ค.
2. KMP(Knuth-Morris-Pratt) ์๊ณ ๋ฆฌ์ฆ
KMP(Knuth-Morris-Pratt) ์๊ณ ๋ฆฌ์ฆ์ ํจํด ์์ฒด์ ๋ํ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ๋ถํ์ํ ๋น๊ต๋ฅผ ํผํ๋ ๋ ํจ์จ์ ์ธ ํจํด ๋งค์นญ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ํจํด์ ์ ์ฒ๋ฆฌํ์ฌ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ ํ ํจํด์ ์ผ๋ง๋ ์ด๋ํด์ผ ํ๋์ง๋ฅผ ๋ํ๋ด๋ ํ ์ด๋ธ์ ์์ฑํฉ๋๋ค.
์๋ ๋ฐฉ์:
- ํจํด ์ ์ฒ๋ฆฌ: "์ต์ฅ ์ ๋์ฌ-์ ๋ฏธ์ฌ(LPS)" ํ ์ด๋ธ์ ์์ฑํฉ๋๋ค. LPS ํ ์ด๋ธ์ ํจํด์ ์ ์ ํ ์ ๋์ฌ์ด๋ฉด์ ๋์์ ์ ๋ฏธ์ฌ์ธ ๊ฒ์ ์ต๋ ๊ธธ์ด๋ฅผ ์ ์ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํจํด "ABCDABD"์ ๊ฒฝ์ฐ LPS ํ ์ด๋ธ์ [0, 0, 0, 0, 1, 2, 0]์ด ๋ฉ๋๋ค.
- ํ
์คํธ ๊ฒ์:
- ํจํด์ ๋ฌธ์์ ํ ์คํธ์ ํด๋น ๋ฌธ์๋ฅผ ๋น๊ตํฉ๋๋ค.
- ๋ชจ๋ ๋ฌธ์๊ฐ ์ผ์นํ๋ฉด ์ผ์น ํญ๋ชฉ์ ์ฐพ์ ๊ฒ์ ๋๋ค.
- ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ฉด LPS ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ํจํด์ ์ผ๋ง๋ ์ด๋ํ ์ง ๊ฒฐ์ ํฉ๋๋ค. KMP ์๊ณ ๋ฆฌ์ฆ์ ๋จ์ง ํ ์นธ๋ง ์ด๋ํ๋ ๋์ , ํจํด์ ํ์ฌ ์ธ๋ฑ์ค์ ํด๋นํ๋ LPS ํ ์ด๋ธ์ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํจํด์ ์ด๋์ํต๋๋ค.
- ํจํด์ด ํ ์คํธ์ ๋์ ๋๋ฌํ ๋๊น์ง 2-3๋จ๊ณ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
์์:
ํ ์คํธ: ABCABCDABABCDABCDABDE ํจํด: ABCDABD LPS ํ ์ด๋ธ: [0, 0, 0, 0, 1, 2, 0]
ํจํด์ 6๋ฒ์งธ ๋ฌธ์('B')์์ "ABCDAB"๊น์ง ์ผ์นํ ํ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ฉด, ์ธ๋ฑ์ค 5์ LPS ๊ฐ์ 2์ ๋๋ค. ์ด๋ ์ ๋์ฌ "AB"(๊ธธ์ด 2)๊ฐ "ABCDAB"์ ์ ๋ฏธ์ฌ์ด๊ธฐ๋ ํจ์ ๋ํ๋ ๋๋ค. KMP ์๊ณ ๋ฆฌ์ฆ์ ์ด ์ ๋์ฌ๊ฐ ํ ์คํธ์์ ์ผ์นํ ์ ๋ฏธ์ฌ์ ์ ๋ ฌ๋๋๋ก ํจํด์ ์ด๋์์ผ ๋ถํ์ํ ๋น๊ต๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ฑด๋๋๋๋ค.
์ฅ์ :
- ๋ธ๋ฃจํธ ํฌ์ค ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ๋ ํจ์จ์ ์ ๋๋ค.
- ์๊ฐ ๋ณต์ก๋๋ O(n+m)์ ๋๋ค (n์ ํ ์คํธ ๊ธธ์ด, m์ ํจํด ๊ธธ์ด).
- LPS ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ๋ถํ์ํ ๋น๊ต๋ฅผ ํผํฉ๋๋ค.
๋จ์ :
- LPS ํ ์ด๋ธ์ ์์ฑํ๊ธฐ ์ํด ํจํด์ ์ ์ฒ๋ฆฌํด์ผ ํ๋ฏ๋ก ์ ์ฒด์ ์ธ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํฉ๋๋ค.
- ๋ธ๋ฃจํธ ํฌ์ค ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ์ดํดํ๊ณ ๊ตฌํํ๊ธฐ๊ฐ ๋ ๋ณต์กํ ์ ์์ต๋๋ค.
3. ๋ณด์ด์ด-๋ฌด์ด(Boyer-Moore) ์๊ณ ๋ฆฌ์ฆ
๋ณด์ด์ด-๋ฌด์ด ์๊ณ ๋ฆฌ์ฆ์ ์ค์ ํ๊ฒฝ์์ KMP ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ์ข ์ข ๋ ๋์ ์ฑ๋ฅ์ ๋ณด์ด๋ ๋ ๋ค๋ฅธ ํจ์จ์ ์ธ ํจํด ๋งค์นญ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ํจํด์ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ค์บํ๊ณ "๋์ ๋ฌธ์" ํด๋ฆฌ์คํฑ๊ณผ "์ข์ ์ ๋ฏธ์ฌ" ํด๋ฆฌ์คํฑ์ด๋ผ๋ ๋ ๊ฐ์ง ํด๋ฆฌ์คํฑ์ ์ฌ์ฉํ์ฌ ๋ถ์ผ์น ๋ฐ์ ์ ํจํด์ ์ผ๋ง๋ ์ด๋ํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ํ ์คํธ์ ๋ง์ ๋ถ๋ถ์ ๊ฑด๋๋ธ ์ ์์ด ๋ ๋น ๋ฅธ ๊ฒ์์ด ๊ฐ๋ฅํฉ๋๋ค.
์๋ ๋ฐฉ์:
- ํจํด ์ ์ฒ๋ฆฌ:
- ๋์ ๋ฌธ์ ํด๋ฆฌ์คํฑ: ํจํด์ ๊ฐ ๋ฌธ์๊ฐ ๋ง์ง๋ง์ผ๋ก ๋ํ๋๋ ์์น๋ฅผ ์ ์ฅํ๋ ํ ์ด๋ธ์ ๋ง๋ญ๋๋ค. ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ์ด ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ํ ์คํธ์์ ๋ถ์ผ์นํ ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํจํด์ ์ผ๋ง๋ ์ด๋ํ ์ง ๊ฒฐ์ ํฉ๋๋ค.
- ์ข์ ์ ๋ฏธ์ฌ ํด๋ฆฌ์คํฑ: ํจํด์ ์ผ์น๋ ์ ๋ฏธ์ฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ ํ ์ด๋ธ์ ๋ง๋ญ๋๋ค. ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ์ด ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ์ผ์น๋ ์ ๋ฏธ์ฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํจํด์ ์ผ๋ง๋ ์ด๋ํ ์ง ๊ฒฐ์ ํฉ๋๋ค.
- ํ
์คํธ ๊ฒ์:
- ํจํด์ ํ ์คํธ์ ์์ ๋ถ๋ถ์ ๋ง์ถฅ๋๋ค.
- ํจํด์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๋ฌธ์๋ถํฐ ์์ํ์ฌ ํจํด์ ๋ฌธ์์ ํ ์คํธ์ ํด๋น ๋ฌธ์๋ฅผ ๋น๊ตํฉ๋๋ค.
- ๋ชจ๋ ๋ฌธ์๊ฐ ์ผ์นํ๋ฉด ์ผ์น ํญ๋ชฉ์ ์ฐพ์ ๊ฒ์ ๋๋ค.
- ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ฉด ๋์ ๋ฌธ์ ๋ฐ ์ข์ ์ ๋ฏธ์ฌ ํด๋ฆฌ์คํฑ์ ์ฌ์ฉํ์ฌ ํจํด์ ์ผ๋ง๋ ์ด๋ํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ์๊ณ ๋ฆฌ์ฆ์ ๋ ์ด๋ ๊ฑฐ๋ฆฌ ์ค ๋ ํฐ ๊ฐ์ ์ ํํฉ๋๋ค.
- ํจํด์ด ํ ์คํธ์ ๋์ ๋๋ฌํ ๋๊น์ง 2-4๋จ๊ณ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
์์:
ํ ์คํธ: ABCABCDABABCDABCDABDE ํจํด: ABCDABD
ํจํด์ 6๋ฒ์งธ ๋ฌธ์('B')์์ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋์ ๋ฌธ์ ํด๋ฆฌ์คํฑ์ ํจํด ๋ด์์ (๋ถ์ผ์น๋ 'B' ์์ฒด๋ฅผ ์ ์ธํ๊ณ ) 'B'๊ฐ ๋ง์ง๋ง์ผ๋ก ๋ํ๋๋ ์์น๋ฅผ ์ฐพ์ ๊ฒ์ด๋ฉฐ, ์ด๋ ์ธ๋ฑ์ค 1์ ๋๋ค. ์ข์ ์ ๋ฏธ์ฌ ํด๋ฆฌ์คํฑ์ ์ผ์นํ ์ ๋ฏธ์ฌ "DAB"๋ฅผ ๋ถ์ํ๊ณ ํจํด ๋ด์์์ ์ถํ์ ๊ธฐ๋ฐ์ผ๋ก ์ ์ ํ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฒฐ์ ํ ๊ฒ์ ๋๋ค.
์ฅ์ :
- ์ค์ ํ๊ฒฝ์์ ๋งค์ฐ ํจ์จ์ ์ด๋ฉฐ ์ข ์ข KMP ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ์ฑ๋ฅ์ด ๋ฐ์ด๋ฉ๋๋ค.
- ํ ์คํธ์ ๋ง์ ๋ถ๋ถ์ ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
๋จ์ :
- KMP ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ์ดํดํ๊ณ ๊ตฌํํ๊ธฐ๊ฐ ๋ ๋ณต์กํฉ๋๋ค.
- ์ต์ ์ ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋๋ O(m*n)์ด ๋ ์ ์์ง๋ง, ์ค์ ๋ก๋ ๋๋ญ ๋๋ค.
4. ๋ผ๋น-์นดํ(Rabin-Karp) ์๊ณ ๋ฆฌ์ฆ
๋ผ๋น-์นดํ ์๊ณ ๋ฆฌ์ฆ์ ํด์ฑ์ ์ฌ์ฉํ์ฌ ์ผ์นํ๋ ํจํด์ ์ฐพ์ต๋๋ค. ํจํด์ ๋ํ ํด์ ๊ฐ์ ๊ณ์ฐํ ๋ค์, ํจํด๊ณผ ๋์ผํ ๊ธธ์ด์ ํ ์คํธ ํ์ ๋ฌธ์์ด์ ๋ํ ํด์ ๊ฐ์ ๊ณ์ฐํฉ๋๋ค. ํด์ ๊ฐ์ด ์ผ์นํ๋ฉด ๋ฌธ์๋ณ ๋น๊ต๋ฅผ ์ํํ์ฌ ์ผ์น๋ฅผ ํ์ธํฉ๋๋ค.
์๋ ๋ฐฉ์:
- ํจํด ํด์ฑ: ์ ์ ํ ํด์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํจํด์ ํด์ ๊ฐ์ ๊ณ์ฐํฉ๋๋ค.
- ํ ์คํธ ํด์ฑ: ํจํด๊ณผ ๋์ผํ ๊ธธ์ด๋ฅผ ๊ฐ์ง ํ ์คํธ์ ๋ชจ๋ ํ์ ๋ฌธ์์ด์ ๋ํ ํด์ ๊ฐ์ ๊ณ์ฐํฉ๋๋ค. ์ด๋ ๋กค๋ง ํด์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํจ์จ์ ์ผ๋ก ์ํ๋๋ฉฐ, ๋กค๋ง ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ด์ ํ์ ๋ฌธ์์ด์ ํด์ ๊ฐ์ผ๋ก๋ถํฐ ๋ค์ ํ์ ๋ฌธ์์ด์ ํด์ ๊ฐ์ O(1) ์๊ฐ์ ๊ณ์ฐํ ์ ์์ต๋๋ค.
- ํด์ ๊ฐ ๋น๊ต: ํจํด์ ํด์ ๊ฐ๊ณผ ํ ์คํธ ํ์ ๋ฌธ์์ด์ ํด์ ๊ฐ์ ๋น๊ตํฉ๋๋ค.
- ์ผ์น ํ์ธ: ํด์ ๊ฐ์ด ์ผ์นํ๋ฉด ๋ฌธ์๋ณ ๋น๊ต๋ฅผ ์ํํ์ฌ ์ผ์น๋ฅผ ํ์ธํฉ๋๋ค. ์ด๋ ์๋ก ๋ค๋ฅธ ๋ฌธ์์ด์ด ๋์ผํ ํด์ ๊ฐ์ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์(์ถฉ๋) ํ์ํฉ๋๋ค.
์์:
ํ ์คํธ: ABCABCDABABCDABCDABDE ํจํด: ABCDABD
์ด ์๊ณ ๋ฆฌ์ฆ์ "ABCDABD"์ ๋ํ ํด์ ๊ฐ์ ๊ณ์ฐํ ๋ค์ "ABCABCD", "BCABCDA", "CABCDAB" ๋ฑ๊ณผ ๊ฐ์ ํ์ ๋ฌธ์์ด์ ๋ํ ๋กค๋ง ํด์ ๊ฐ์ ๊ณ์ฐํฉ๋๋ค. ํด์ ๊ฐ์ด ์ผ์นํ๋ฉด ์ง์ ๋น๊ต๋ฅผ ํตํด ํ์ธํฉ๋๋ค.
์ฅ์ :
- ๊ตฌํ์ด ๋น๊ต์ ๊ฐ๋จํฉ๋๋ค.
- ํ๊ท ์๊ฐ ๋ณต์ก๋๋ O(n+m)์ ๋๋ค.
- ๋ค์ค ํจํด ๋งค์นญ์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
๋จ์ :
- ํด์ ์ถฉ๋๋ก ์ธํด ์ต์ ์ ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋๋ O(m*n)์ด ๋ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ์ ํด์ ํจ์์ ์ ํ์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ์ข์ง ์์ ํด์ ํจ์๋ ๋ง์ ์ถฉ๋์ ์ ๋ฐํ์ฌ ์ฑ๋ฅ์ ์ ํ์ํฌ ์ ์์ต๋๋ค.
๊ณ ๊ธ ํจํด ๋งค์นญ ๊ธฐ๋ฒ
์์์ ๋ ผ์๋ ๊ธฐ๋ณธ ์๊ณ ๋ฆฌ์ฆ ์ธ์๋, ํน์ํ ํจํด ๋งค์นญ ๋ฌธ์ ๋ฅผ ์ํ ๋ช ๊ฐ์ง ๊ณ ๊ธ ๊ธฐ๋ฒ์ด ์กด์ฌํฉ๋๋ค.
1. ์ ๊ท ํํ์
์ ๊ท ํํ์(regex)์ ํน์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ณต์กํ ํจํด์ ์ ์ํ ์ ์๋ ๊ฐ๋ ฅํ ํจํด ๋งค์นญ ๋๊ตฌ์ ๋๋ค. ํ ์คํธ ์ฒ๋ฆฌ, ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ, ๊ฒ์ ๋ฐ ๋ฐ๊พธ๊ธฐ ์์ ์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. ์ ๊ท ํํ์์ ๋ค๋ฃจ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฑฐ์ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ (Python):
import re
text = "The quick brown fox jumps over the lazy dog."
pattern = "fox.*dog"
match = re.search(pattern, text)
if match:
print("Match found:", match.group())
else:
print("No match found")
2. ๊ทผ์ฌ ๋ฌธ์์ด ๋งค์นญ
๊ทผ์ฌ ๋ฌธ์์ด ๋งค์นญ(ํผ์ง ๋ฌธ์์ด ๋งค์นญ์ด๋ผ๊ณ ๋ ํจ)์ ๋์ ํจํด๊ณผ ์ ํํ ์ผ์นํ์ง ์๋๋ผ๋ ์ ์ฌํ ํจํด์ ์ฐพ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ๋ง์ถค๋ฒ ๊ฒ์ฌ, DNA ์์ด ์ ๋ ฌ, ์ ๋ณด ๊ฒ์๊ณผ ๊ฐ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ์ฉํฉ๋๋ค. ๋ ๋ฒค์ํ์ธ ๊ฑฐ๋ฆฌ(ํธ์ง ๊ฑฐ๋ฆฌ)์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฌธ์์ด ๊ฐ์ ์ ์ฌ์ฑ์ ์ ๋ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
3. ์ ๋ฏธ์ฌ ํธ๋ฆฌ์ ์ ๋ฏธ์ฌ ๋ฐฐ์ด
์ ๋ฏธ์ฌ ํธ๋ฆฌ์ ์ ๋ฏธ์ฌ ๋ฐฐ์ด์ ํจํด ๋งค์นญ์ ํฌํจํ ๋ค์ํ ๋ฌธ์์ด ๋ฌธ์ ๋ฅผ ํจ์จ์ ์ผ๋ก ํด๊ฒฐํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค. ์ ๋ฏธ์ฌ ํธ๋ฆฌ๋ ๋ฌธ์์ด์ ๋ชจ๋ ์ ๋ฏธ์ฌ๋ฅผ ๋ํ๋ด๋ ํธ๋ฆฌ์ ๋๋ค. ์ ๋ฏธ์ฌ ๋ฐฐ์ด์ ๋ฌธ์์ด์ ๋ชจ๋ ์ ๋ฏธ์ฌ๋ฅผ ์ ๋ ฌํ ๋ฐฐ์ด์ ๋๋ค. ์ด๋ฌํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์คํธ์์ ํจํด์ ๋ชจ๋ ๋ฐ์์ O(m) ์๊ฐ์ ์ฐพ์ ์ ์์ต๋๋ค (m์ ํจํด์ ๊ธธ์ด).
4. ์ํธ-์ฝ๋ผ์(Aho-Corasick) ์๊ณ ๋ฆฌ์ฆ
์ํธ-์ฝ๋ผ์ ์๊ณ ๋ฆฌ์ฆ์ ํ ์คํธ์์ ์ฌ๋ฌ ํจํด์ ๋ชจ๋ ๋ฐ์์ ๋์์ ์ฐพ์ ์ ์๋ ์ฌ์ ๋งค์นญ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ํจํด ์งํฉ์ผ๋ก๋ถํฐ ์ ํ ์ํ ๊ธฐ๊ณ(FSM)๋ฅผ ๊ตฌ์ถํ ๋ค์ FSM์ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๋ฌ ํจํด์ ๋ํด ๋์ฉ๋ ํ ์คํธ๋ฅผ ๊ฒ์ํ๋ ๋ฐ ๋งค์ฐ ํจ์จ์ ์ด๋ฏ๋ก ์นจ์ ํ์ง ๋ฐ ์ ์ฑ ์ฝ๋ ๋ถ์๊ณผ ๊ฐ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ํฉํฉ๋๋ค.
์ฌ๋ฐ๋ฅธ ์๊ณ ๋ฆฌ์ฆ ์ ํํ๊ธฐ
๊ฐ์ฅ ์ ์ ํ ํจํด ๋งค์นญ ์๊ณ ๋ฆฌ์ฆ์ ์ ํ์ ๋ค์์ ํฌํจํ ์ฌ๋ฌ ์์ธ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค:
- ํ ์คํธ์ ํจํด์ ํฌ๊ธฐ: ์์ ํ ์คํธ์ ํจํด์ ๊ฒฝ์ฐ ๋ธ๋ฃจํธ ํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ถฉ๋ถํ ์ ์์ต๋๋ค. ๋ ํฐ ํ ์คํธ์ ํจํด์ ๊ฒฝ์ฐ KMP, ๋ณด์ด์ด-๋ฌด์ด ๋๋ ๋ผ๋น-์นดํ ์๊ณ ๋ฆฌ์ฆ์ด ๋ ํจ์จ์ ์ ๋๋ค.
- ๊ฒ์ ๋น๋: ๋์ผํ ํ ์คํธ์ ๋ํด ๋ง์ ๊ฒ์์ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ, ์ ๋ฏธ์ฌ ํธ๋ฆฌ๋ ์ ๋ฏธ์ฌ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๊ฐ์น๊ฐ ์์ ์ ์์ต๋๋ค.
- ํจํด์ ๋ณต์ก์ฑ: ๋ณต์กํ ํจํด์ ๊ฒฝ์ฐ ์ ๊ท ํํ์์ด ์ต์ ์ ์ ํ์ผ ์ ์์ต๋๋ค.
- ๊ทผ์ฌ ๋งค์นญ์ ํ์์ฑ: ๋์ ํจํด๊ณผ ์ ์ฌํ ํจํด์ ์ฐพ์์ผ ํ๋ ๊ฒฝ์ฐ, ๊ทผ์ฌ ๋ฌธ์์ด ๋งค์นญ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ํจํด์ ์: ์ฌ๋ฌ ํจํด์ ๋์์ ๊ฒ์ํด์ผ ํ๋ ๊ฒฝ์ฐ, ์ํธ-์ฝ๋ผ์ ์๊ณ ๋ฆฌ์ฆ์ด ์ข์ ์ ํ์ ๋๋ค.
๋ค์ํ ๋ถ์ผ์์์ ์์ฉ
ํจํด ๋งค์นญ ๊ธฐ๋ฒ์ ๋ค์ํ ๋ถ์ผ์ ๊ฑธ์ณ ๊ด๋ฒ์ํ๊ฒ ์ ์ฉ๋์ด ๊ทธ ๋ค์ฌ๋ค๋ฅํจ๊ณผ ์ค์์ฑ์ ๋ณด์ฌ์ค๋๋ค:
- ์๋ฌผ์ ๋ณดํ: DNA ์์ด, ๋จ๋ฐฑ์ง ๋ชจํฐํ ๋ฐ ๊ธฐํ ์๋ฌผํ์ ํจํด์ ์๋ณํฉ๋๋ค. ๊ฒ๋๊ณผ ํ๋กํ ์ด์ ๋ถ์ํ์ฌ ์๋ฌผํ์ ๊ณผ์ ๊ณผ ์ง๋ณ์ ์ดํดํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์ ์งํ๊ณผ ๊ด๋ จ๋ ํน์ ์ ์ ์ ์์ด์ ๊ฒ์ํฉ๋๋ค.
- ์ฌ์ด๋ฒ ๋ณด์: ๋คํธ์ํฌ ํธ๋ํฝ์์ ์ ์ฑ ํจํด์ ํ์งํ๊ณ , ์ ์ฑ ์ฝ๋ ์๋ช ์ ์๋ณํ๋ฉฐ, ๋ณด์ ๋ก๊ทธ๋ฅผ ๋ถ์ํฉ๋๋ค. ์นจ์ ํ์ง ์์คํ (IDS) ๋ฐ ์นจ์ ๋ฐฉ์ง ์์คํ (IPS)์ ์ ์ฑ ํ๋์ ์๋ณํ๊ณ ์ฐจ๋จํ๊ธฐ ์ํด ํจํด ๋งค์นญ์ ํฌ๊ฒ ์์กดํฉ๋๋ค.
- ๊ฒ์ ์์ง: ์น ํ์ด์ง๋ฅผ ์ธ๋ฑ์ฑ ๋ฐ ๊ฒ์ํ๊ณ , ๊ด๋ จ์ฑ์ ๋ฐ๋ผ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์์ ๋งค๊ธฐ๋ฉฐ, ์๋ ์์ฑ ์ ์์ ์ ๊ณตํฉ๋๋ค. ๊ฒ์ ์์ง์ ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ์์ ์ ๋ณด๋ฅผ ํจ์จ์ ์ผ๋ก ์ฐพ๊ณ ๊ฒ์ํ๊ธฐ ์ํด ์ ๊ตํ ํจํด ๋งค์นญ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ง์ด๋: ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ์์ ํจํด๊ณผ ๊ด๊ณ๋ฅผ ๋ฐ๊ฒฌํ๊ณ , ์ถ์ธ๋ฅผ ์๋ณํ๋ฉฐ, ์์ธก์ ์ํํฉ๋๋ค. ํจํด ๋งค์นญ์ ์ฅ๋ฐ๊ตฌ๋ ๋ถ์ ๋ฐ ๊ณ ๊ฐ ์ธ๋ถํ์ ๊ฐ์ ๋ค์ํ ๋ฐ์ดํฐ ๋ง์ด๋ ์์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
- ์์ฐ์ด ์ฒ๋ฆฌ(NLP): ํ ์คํธ ์ฒ๋ฆฌ, ์ ๋ณด ์ถ์ถ ๋ฐ ๊ธฐ๊ณ ๋ฒ์ญ. NLP ์์ฉ ํ๋ก๊ทธ๋จ์ ํ ํฐํ, ํ์ฌ ํ๊น , ๊ฐ์ฒด๋ช ์ธ์๊ณผ ๊ฐ์ ์์ ์ ํจํด ๋งค์นญ์ ์ฌ์ฉํฉ๋๋ค.
- ์ํํธ์จ์ด ๊ฐ๋ฐ: ์ฝ๋ ๋ถ์, ๋๋ฒ๊น ๋ฐ ๋ฆฌํฉํ ๋ง. ํจํด ๋งค์นญ์ ์ฝ๋ ์ค๋ฉ์ ์๋ณํ๊ณ , ์ ์ฌ์ ์ธ ๋ฒ๊ทธ๋ฅผ ํ์งํ๋ฉฐ, ์ฝ๋ ๋ณํ์ ์๋ํํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
๋ฌธ์์ด ์๊ณ ๋ฆฌ์ฆ๊ณผ ํจํด ๋งค์นญ ๊ธฐ๋ฒ์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ถ์ํ๊ธฐ ์ํ ํ์ ๋๊ตฌ์ ๋๋ค. ์ฃผ์ด์ง ์์ ์ ๊ฐ์ฅ ์ ํฉํ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๋ ค๋ฉด ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ ๊ณผ ์ฝ์ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๊ฐ๋จํ ๋ธ๋ฃจํธ ํฌ์ค ์ ๊ทผ ๋ฐฉ์๋ถํฐ ์ ๊ตํ ์ํธ-์ฝ๋ผ์ ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ฅด๊ธฐ๊น์ง, ๊ฐ ๊ธฐ๋ฒ์ ํจ์จ์ฑ๊ณผ ๋ณต์ก์ฑ ์ฌ์ด์์ ๊ณ ์ ํ ํธ๋ ์ด๋์คํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ๊ณ์ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ํจ์จ์ ์ด๊ณ ํจ๊ณผ์ ์ธ ํจํด ๋งค์นญ ์๊ณ ๋ฆฌ์ฆ์ ์ค์์ฑ์ ๋์ฑ ์ปค์ง ๊ฒ์ ๋๋ค.
์ด๋ฌํ ๊ธฐ๋ฒ์ ๋ง์คํฐํจ์ผ๋ก์จ ๊ฐ๋ฐ์์ ์ฐ๊ตฌ์์ ํ ์คํธ ๋ฐ์ดํฐ์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ๋ฐํํ๊ณ ๋ค์ํ ์์ญ์ ๊ฑธ์ณ ๊ด๋ฒ์ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.